import java.util.ArrayList;
import java.util.List;

/**
 * 过滤器模式：通过定义一组标准的接口，允许用户根据不同的条件动态地组合和重用过滤逻辑
 * 
 * 示例需求：
 * 我们将创建一个 Person 对象、Criteria 接口和实现了该接口的实体类，来过滤 Person 对象的列表。
 * CriteriaPatternDemo 类使用 Criteria 对象，基于各种标准和它们的结合来过滤 Person 对象的列表。
 * 
 * 角色：
 * 过滤器接口：Criteria
 * 过滤器具体实现类：AndCriteria、OrCriteria、CriteriaFemale、CriteriaMale
 * 被过滤的对象：Person
 * 客户端：SimpleMain
 */
public class SimpleMain {
    public static void main(String[] args) {
        // 创建被过滤对象的集合
        ArrayList<Person> persons = new ArrayList<Person>();
        persons.add(new Person("Robert", "Male", "Single"));
        persons.add(new Person("John", "Male", "Married"));
        persons.add(new Person("Laura", "Female", "Married"));
        persons.add(new Person("Diana", "Female", "Single"));
        persons.add(new Person("Mike", "Male", "Single"));
        persons.add(new Person("Bobby", "Male", "Single"));

        //创建过滤器
       Criteria criteriaFemale = new CriteriaFemale();

       //使用过滤器筛选出符合要求的对象
       printPersons(criteriaFemale.meetCriteria(persons));

    }


   public static void printPersons(List<Person> persons){
      for (Person person : persons) {
         System.out.println("Person : [ Name : " + person.getName() 
            +", Gender : " + person.getGender() 
            +", Marital Status : " + person.getMaritalStatus()
            +" ]");
      }
   }   
}